home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / imagehlp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  23.1 KB  |  934 lines

  1. /*++ BUILD Version: 0001     Increment this if a change has global effects
  2.  
  3. Copyright (c) 1993-1996  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     imagehlp.h
  8.  
  9. Abstract:
  10.  
  11.     This module defines the prptotypes and constants required for the image
  12.     help routines.
  13.  
  14. Revision History:
  15.  
  16. --*/
  17.  
  18. #ifndef _IMAGEHLP_
  19. #define _IMAGEHLP_
  20. #pragma option push -b
  21.  
  22.  
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27. #ifdef __BORLANDC__
  28. #  include <pshpack8.h>
  29. #endif
  30.  
  31. //
  32. // Define checksum return codes.
  33. //
  34.  
  35. #define CHECKSUM_SUCCESS            0
  36. #define CHECKSUM_OPEN_FAILURE       1
  37. #define CHECKSUM_MAP_FAILURE        2
  38. #define CHECKSUM_MAPVIEW_FAILURE    3
  39. #define CHECKSUM_UNICODE_FAILURE    4
  40.  
  41. // Define Splitsym flags.
  42.  
  43. #define SPLITSYM_REMOVE_PRIVATE     0x00000001      // Remove CV types/symbols and Fixup debug
  44.                                                     //  Used for creating .dbg files that ship
  45.                                                     //  as part of the product.
  46.  
  47. #define SPLITSYM_EXTRACT_ALL        0x00000002      // Extract all debug info from image.
  48.                                                     //  Normally, FPO is left in the image
  49.                                                     //  to allow stack traces through the code.
  50.                                                     //  Using this switch is similar to linking
  51.                                                     //  with -debug:none except the .dbg file
  52.                                                     //  exists...
  53.  
  54. #ifdef _IMAGEHLP_SOURCE_
  55. #define IMAGEAPI __stdcall
  56. #else
  57. #define IMAGEAPI DECLSPEC_IMPORT __stdcall
  58. #endif
  59.  
  60. //
  61. // Define checksum function prototypes.
  62. //
  63.  
  64. PIMAGE_NT_HEADERS
  65. IMAGEAPI
  66. CheckSumMappedFile (
  67.     LPVOID BaseAddress,
  68.     DWORD FileLength,
  69.     LPDWORD HeaderSum,
  70.     LPDWORD CheckSum
  71.     );
  72.  
  73. DWORD
  74. IMAGEAPI
  75. MapFileAndCheckSumA (
  76.     LPSTR Filename,
  77.     LPDWORD HeaderSum,
  78.     LPDWORD CheckSum
  79.     );
  80.  
  81. DWORD
  82. IMAGEAPI
  83. MapFileAndCheckSumW (
  84.     PWSTR Filename,
  85.     LPDWORD HeaderSum,
  86.     LPDWORD CheckSum
  87.     );
  88.  
  89. #ifdef UNICODE
  90. #define MapFileAndCheckSum  MapFileAndCheckSumW
  91. #else
  92. #define MapFileAndCheckSum  MapFileAndCheckSumA
  93. #endif // !UNICODE
  94.  
  95.  
  96. BOOL
  97. IMAGEAPI
  98. TouchFileTimes (
  99.     HANDLE FileHandle,
  100.     LPSYSTEMTIME lpSystemTime
  101.     );
  102.  
  103. BOOL
  104. IMAGEAPI
  105. SplitSymbols (
  106.     LPSTR ImageName,
  107.     LPSTR SymbolsPath,
  108.     LPSTR SymbolFilePath,
  109.     DWORD Flags                 // Combination of flags above
  110.     );
  111.  
  112. HANDLE
  113. IMAGEAPI
  114. FindDebugInfoFile (
  115.     LPSTR FileName,
  116.     LPSTR SymbolPath,
  117.     LPSTR DebugFilePath
  118.     );
  119.  
  120. HANDLE
  121. IMAGEAPI
  122. FindExecutableImage(
  123.     LPSTR FileName,
  124.     LPSTR SymbolPath,
  125.     LPSTR ImageFilePath
  126.     );
  127.  
  128. BOOL
  129. IMAGEAPI
  130. UpdateDebugInfoFile(
  131.     LPSTR ImageFileName,
  132.     LPSTR SymbolPath,
  133.     LPSTR DebugFilePath,
  134.     PIMAGE_NT_HEADERS NtHeaders
  135.     );
  136.  
  137. BOOL
  138. IMAGEAPI
  139. UpdateDebugInfoFileEx(
  140.     LPSTR ImageFileName,
  141.     LPSTR SymbolPath,
  142.     LPSTR DebugFilePath,
  143.     PIMAGE_NT_HEADERS NtHeaders,
  144.     DWORD OldChecksum
  145.     );
  146.  
  147. BOOL
  148. IMAGEAPI
  149. BindImage(
  150.     IN LPSTR ImageName,
  151.     IN LPSTR DllPath,
  152.     IN LPSTR SymbolPath
  153.     );
  154.  
  155. typedef enum _IMAGEHLP_STATUS_REASON {
  156.     BindOutOfMemory,
  157.     BindRvaToVaFailed,
  158.     BindNoRoomInImage,
  159.     BindImportModuleFailed,
  160.     BindImportProcedureFailed,
  161.     BindImportModule,
  162.     BindImportProcedure,
  163.     BindForwarder,
  164.     BindForwarderNOT,
  165.     BindImageModified,
  166.     BindExpandFileHeaders,
  167.     BindImageComplete,
  168.     BindMismatchedSymbols,
  169.     BindSymbolsNotUpdated
  170. } IMAGEHLP_STATUS_REASON;
  171.  
  172. typedef
  173. BOOL
  174. (__stdcall *PIMAGEHLP_STATUS_ROUTINE)(
  175.     IMAGEHLP_STATUS_REASON Reason,
  176.     LPSTR ImageName,
  177.     LPSTR DllName,
  178.     ULONG Va,
  179.     ULONG Parameter
  180.     );
  181.  
  182.  
  183. BOOL
  184. IMAGEAPI
  185. BindImageEx(
  186.     IN DWORD Flags,
  187.     IN LPSTR ImageName,
  188.     IN LPSTR DllPath,
  189.     IN LPSTR SymbolPath,
  190.     IN PIMAGEHLP_STATUS_ROUTINE StatusRoutine
  191.     );
  192.  
  193. #define BIND_NO_BOUND_IMPORTS 0x00000001
  194. #define BIND_NO_UPDATE        0x00000002
  195. #define BIND_ALL_IMAGES       0x00000004
  196.  
  197. BOOL
  198. IMAGEAPI
  199. ReBaseImage(
  200.     IN     LPSTR CurrentImageName,
  201.     IN     LPSTR SymbolPath,
  202.     IN     BOOL  fReBase,          // TRUE if actually rebasing, false if only summing
  203.     IN     BOOL  fRebaseSysfileOk, // TRUE is system images s/b rebased
  204.     IN     BOOL  fGoingDown,       // TRUE if the image s/b rebased below the given base
  205.     IN     ULONG CheckImageSize,   // Max size allowed  (0 if don't care)
  206.     OUT    ULONG *OldImageSize,    // Returned from the header
  207.     OUT    ULONG *OldImageBase,    // Returned from the header
  208.     OUT    ULONG *NewImageSize,    // Image size rounded to next separation boundary
  209.     IN OUT ULONG *NewImageBase,    // (in) Desired new address.
  210.                                    // (out) Next address (actual if going down)
  211.     IN     ULONG TimeStamp         // new timestamp for image, if non-zero
  212.     );
  213.  
  214. #define IMAGE_SEPARATION (64*1024)
  215.  
  216.  
  217. typedef struct _LOADED_IMAGE {
  218.     LPSTR                 ModuleName;
  219.     HANDLE                hFile;
  220.     PUCHAR                MappedAddress;
  221.     PIMAGE_NT_HEADERS     FileHeader;
  222.     PIMAGE_SECTION_HEADER LastRvaSection;
  223.     ULONG                 NumberOfSections;
  224.     PIMAGE_SECTION_HEADER Sections;
  225.     ULONG                 Characteristics;
  226.     BOOLEAN               fSystemImage;
  227.     BOOLEAN               fDOSImage;
  228.     LIST_ENTRY            Links;
  229.     ULONG                 SizeOfImage;
  230. } LOADED_IMAGE, *PLOADED_IMAGE;
  231.  
  232.  
  233. PLOADED_IMAGE
  234. IMAGEAPI
  235. ImageLoad(
  236.     LPSTR DllName,
  237.     LPSTR DllPath
  238.     );
  239.  
  240. BOOL
  241. IMAGEAPI
  242. ImageUnload(
  243.     PLOADED_IMAGE LoadedImage
  244.     );
  245.  
  246. PIMAGE_NT_HEADERS
  247. IMAGEAPI
  248. ImageNtHeader (
  249.     IN PVOID Base
  250.     );
  251.  
  252. PVOID
  253. IMAGEAPI
  254. ImageDirectoryEntryToData (
  255.     IN PVOID Base,
  256.     IN BOOLEAN MappedAsImage,
  257.     IN USHORT DirectoryEntry,
  258.     OUT PULONG Size
  259.     );
  260.  
  261. PIMAGE_SECTION_HEADER
  262. IMAGEAPI
  263. ImageRvaToSection(
  264.     IN PIMAGE_NT_HEADERS NtHeaders,
  265.     IN PVOID Base,
  266.     IN ULONG Rva
  267.     );
  268.  
  269. PVOID
  270. IMAGEAPI
  271. ImageRvaToVa(
  272.     IN PIMAGE_NT_HEADERS NtHeaders,
  273.     IN PVOID Base,
  274.     IN ULONG Rva,
  275.     IN OUT PIMAGE_SECTION_HEADER *LastRvaSection
  276.     );
  277.  
  278. BOOL
  279. IMAGEAPI
  280. MapAndLoad(
  281.     LPSTR ImageName,
  282.     LPSTR DllPath,
  283.     PLOADED_IMAGE LoadedImage,
  284.     BOOL DotDll,
  285.     BOOL ReadOnly
  286.     );
  287.  
  288. BOOL
  289. IMAGEAPI
  290. GetImageConfigInformation(
  291.     PLOADED_IMAGE LoadedImage,
  292.     PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
  293.     );
  294.  
  295. DWORD
  296. IMAGEAPI
  297. GetImageUnusedHeaderBytes(
  298.     PLOADED_IMAGE LoadedImage,
  299.     LPDWORD SizeUnusedHeaderBytes
  300.     );
  301.  
  302. BOOL
  303. IMAGEAPI
  304. SetImageConfigInformation(
  305.     PLOADED_IMAGE LoadedImage,
  306.     PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
  307.     );
  308.  
  309. BOOL
  310. IMAGEAPI
  311. UnMapAndLoad(
  312.    PLOADED_IMAGE LoadedImage
  313.    );
  314.  
  315. typedef struct _IMAGE_DEBUG_INFORMATION {
  316.     LIST_ENTRY List;
  317.     DWORD Size;
  318.     PVOID MappedBase;
  319.     USHORT Machine;
  320.     USHORT Characteristics;
  321.     DWORD CheckSum;
  322.     DWORD ImageBase;
  323.     DWORD SizeOfImage;
  324.  
  325.     DWORD NumberOfSections;
  326.     PIMAGE_SECTION_HEADER Sections;
  327.  
  328.     DWORD ExportedNamesSize;
  329.     LPSTR ExportedNames;
  330.  
  331.     DWORD NumberOfFunctionTableEntries;
  332.     PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
  333.     DWORD LowestFunctionStartingAddress;
  334.     DWORD HighestFunctionEndingAddress;
  335.  
  336.     DWORD NumberOfFpoTableEntries;
  337.     PFPO_DATA FpoTableEntries;
  338.  
  339.     DWORD SizeOfCoffSymbols;
  340.     PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
  341.  
  342.     DWORD SizeOfCodeViewSymbols;
  343.     PVOID CodeViewSymbols;
  344.  
  345.     LPSTR ImageFilePath;
  346.     LPSTR ImageFileName;
  347.     LPSTR DebugFilePath;
  348.  
  349.     DWORD TimeDateStamp;
  350.  
  351.     BOOL  RomImage;
  352.     PIMAGE_DEBUG_DIRECTORY DebugDirectory;
  353.     DWORD NumberOfDebugDirectories;
  354.  
  355.     DWORD Reserved[ 3 ];
  356.  
  357. } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
  358.  
  359.  
  360. PIMAGE_DEBUG_INFORMATION
  361. IMAGEAPI
  362. MapDebugInformation (
  363.     HANDLE FileHandle,
  364.     LPSTR FileName,
  365.     LPSTR SymbolPath,
  366.     DWORD ImageBase
  367.     );
  368.  
  369. BOOL
  370. IMAGEAPI
  371. UnmapDebugInformation(
  372.     PIMAGE_DEBUG_INFORMATION DebugInfo
  373.     );
  374.  
  375. HANDLE
  376. IMAGEAPI
  377. FindExecutableImage(
  378.     LPSTR FileName,
  379.     LPSTR SymbolPath,
  380.     LPSTR ImageFilePath
  381.     );
  382.  
  383. BOOL
  384. IMAGEAPI
  385. SearchTreeForFile(
  386.     LPSTR RootPath,
  387.     LPSTR InputPathName,
  388.     LPSTR OutputPathBuffer
  389.     );
  390.  
  391. BOOL
  392. IMAGEAPI
  393. MakeSureDirectoryPathExists(
  394.     LPCSTR DirPath
  395.     );
  396.  
  397. //
  398. // UnDecorateSymbolName Flags
  399. //
  400.  
  401. #define UNDNAME_COMPLETE                 (0x0000)  // Enable full undecoration
  402. #define UNDNAME_NO_LEADING_UNDERSCORES   (0x0001)  // Remove leading underscores from MS extended keywords
  403. #define UNDNAME_NO_MS_KEYWORDS           (0x0002)  // Disable expansion of MS extended keywords
  404. #define UNDNAME_NO_FUNCTION_RETURNS      (0x0004)  // Disable expansion of return type for primary declaration
  405. #define UNDNAME_NO_ALLOCATION_MODEL      (0x0008)  // Disable expansion of the declaration model
  406. #define UNDNAME_NO_ALLOCATION_LANGUAGE   (0x0010)  // Disable expansion of the declaration language specifier
  407. #define UNDNAME_NO_MS_THISTYPE           (0x0020)  // NYI Disable expansion of MS keywords on the 'this' type for primary declaration
  408. #define UNDNAME_NO_CV_THISTYPE           (0x0040)  // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration
  409. #define UNDNAME_NO_THISTYPE              (0x0060)  // Disable all modifiers on the 'this' type
  410. #define UNDNAME_NO_ACCESS_SPECIFIERS     (0x0080)  // Disable expansion of access specifiers for members
  411. #define UNDNAME_NO_THROW_SIGNATURES      (0x0100)  // Disable expansion of 'throw-signatures' for functions and pointers to functions
  412. #define UNDNAME_NO_MEMBER_TYPE           (0x0200)  // Disable expansion of 'static' or 'virtual'ness of members
  413. #define UNDNAME_NO_RETURN_UDT_MODEL      (0x0400)  // Disable expansion of MS model for UDT returns
  414. #define UNDNAME_32_BIT_DECODE            (0x0800)  // Undecorate 32-bit decorated names
  415. #define UNDNAME_NAME_ONLY                (0x1000)  // Crack only the name for primary declaration;
  416.                                                                                                    //  return just [scope::]name.  Does expand template params
  417. #define UNDNAME_NO_ARGUMENTS             (0x2000)  // Don't undecorate arguments to function
  418. #define UNDNAME_NO_SPECIAL_SYMS          (0x4000)  // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc)
  419.  
  420. DWORD
  421. IMAGEAPI
  422. WINAPI
  423. UnDecorateSymbolName(
  424.     LPCSTR   DecoratedName,         // Name to undecorate
  425.     LPSTR    UnDecoratedName,       // If NULL, it will be allocated
  426.     DWORD    UndecoratedLength,     // The maximym length
  427.     DWORD    Flags                  // See above.
  428.     );
  429.  
  430. //
  431. // StackWalking API
  432. //
  433.  
  434. typedef enum {
  435.     AddrMode1616,
  436.     AddrMode1632,
  437.     AddrModeReal,
  438.     AddrModeFlat
  439. } ADDRESS_MODE;
  440.  
  441. typedef struct _tagADDRESS {
  442.     DWORD         Offset;
  443.     WORD          Segment;
  444.     ADDRESS_MODE  Mode;
  445. } ADDRESS, *LPADDRESS;
  446.  
  447.  
  448. //
  449. // This structure is included in the STACKFRAME structure,
  450. // and is used to trace through usermode callbacks in a thread's
  451. // kernel stack.  The values must be copied by the kernel debugger
  452. // from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets.
  453. //
  454. typedef struct _KDHELP {
  455.  
  456.     //
  457.     // address of kernel thread object, as provided in the
  458.     // WAIT_STATE_CHANGE packet.
  459.     //
  460.     DWORD   Thread;
  461.  
  462.     //
  463.     // offset in thread object to pointer to the current callback frame
  464.     // in kernel stack.
  465.     //
  466.     DWORD   ThCallbackStack;
  467.  
  468.     //
  469.     // offsets to values in frame:
  470.     //
  471.     // address of next callback frame
  472.     DWORD   NextCallback;
  473.  
  474.     // address of saved frame pointer (if applicable)
  475.     DWORD   FramePointer;
  476.  
  477.     //
  478.     // Address of the kernel function that calls out to user mode
  479.     //
  480.     DWORD   KiCallUserMode;
  481.  
  482.     //
  483.     // Address of the user mode dispatcher function
  484.     //
  485.     DWORD   KeUserCallbackDispatcher;
  486.  
  487. } KDHELP, *PKDHELP;
  488.  
  489.  
  490. typedef struct _tagSTACKFRAME {
  491.     ADDRESS     AddrPC;               // program counter
  492.     ADDRESS     AddrReturn;           // return address
  493.     ADDRESS     AddrFrame;            // frame pointer
  494.     ADDRESS     AddrStack;            // stack pointer
  495.     LPVOID      FuncTableEntry;       // pointer to pdata/fpo or NULL
  496.     DWORD       Params[4];            // possible arguments to the function
  497.     BOOL        Far;                  // WOW far call
  498.     BOOL        Virtual;              // is this a virtual frame?
  499.     DWORD       Reserved[3];          // used internally by StackWalk api
  500.     KDHELP      KdHelp;
  501. } STACKFRAME, *LPSTACKFRAME;
  502.  
  503. typedef
  504. BOOL
  505. (__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)(
  506.     HANDLE  hProcess,
  507.     LPCVOID lpBaseAddress,
  508.     LPVOID  lpBuffer,
  509.     DWORD   nSize,
  510.     LPDWORD lpNumberOfBytesRead
  511.     );
  512.  
  513. typedef
  514. LPVOID
  515. (__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)(
  516.     HANDLE  hProcess,
  517.     DWORD   AddrBase
  518.     );
  519.  
  520. typedef
  521. DWORD
  522. (__stdcall *PGET_MODULE_BASE_ROUTINE)(
  523.     HANDLE  hProcess,
  524.     DWORD   ReturnAddress
  525.     );
  526.  
  527.  
  528. typedef
  529. DWORD
  530. (__stdcall *PTRANSLATE_ADDRESS_ROUTINE)(
  531.     HANDLE    hProcess,
  532.     HANDLE    hThread,
  533.     LPADDRESS lpaddr
  534.     );
  535.  
  536. BOOL
  537. IMAGEAPI
  538. StackWalk(
  539.     DWORD                             MachineType,
  540.     HANDLE                            hProcess,
  541.     HANDLE                            hThread,
  542.     LPSTACKFRAME                      StackFrame,
  543.     LPVOID                            ContextRecord,
  544.     PREAD_PROCESS_MEMORY_ROUTINE      ReadMemoryRoutine,
  545.     PFUNCTION_TABLE_ACCESS_ROUTINE    FunctionTableAccessRoutine,
  546.     PGET_MODULE_BASE_ROUTINE          GetModuleBaseRoutine,
  547.     PTRANSLATE_ADDRESS_ROUTINE        TranslateAddress
  548.     );
  549.  
  550. #define API_VERSION_NUMBER 5
  551.  
  552. typedef struct API_VERSION {
  553.     USHORT  MajorVersion;
  554.     USHORT  MinorVersion;
  555.     USHORT  Revision;
  556.     USHORT  Reserved;
  557. } API_VERSION, *LPAPI_VERSION;
  558.  
  559. LPAPI_VERSION
  560. IMAGEAPI
  561. ImagehlpApiVersion(
  562.     VOID
  563.     );
  564.  
  565. LPAPI_VERSION
  566. IMAGEAPI
  567. ImagehlpApiVersionEx(
  568.     LPAPI_VERSION AppVersion
  569.     );
  570.  
  571. DWORD
  572. IMAGEAPI
  573. GetTimestampForLoadedLibrary(
  574.     HMODULE Module
  575.     );
  576.  
  577. BOOL
  578. IMAGEAPI
  579. RemovePrivateCvSymbolic(
  580.     PCHAR   DebugData,
  581.     PCHAR * NewDebugData,
  582.     ULONG * NewDebugSize
  583.     );
  584.  
  585. VOID
  586. IMAGEAPI
  587. RemoveRelocations(
  588.     PCHAR ImageName
  589.     );
  590.  
  591. //
  592. // typedefs for function pointers
  593. //
  594. typedef BOOL
  595. (CALLBACK *PSYM_ENUMMODULES_CALLBACK)(
  596.     LPSTR ModuleName,
  597.     ULONG BaseOfDll,
  598.     PVOID UserContext
  599.     );
  600.  
  601. typedef BOOL
  602. (CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)(
  603.     LPSTR SymbolName,
  604.     ULONG SymbolAddress,
  605.     ULONG SymbolSize,
  606.     PVOID UserContext
  607.     );
  608.  
  609. typedef BOOL
  610. (CALLBACK *PENUMLOADED_MODULES_CALLBACK)(
  611.     LPSTR ModuleName,
  612.     ULONG ModuleBase,
  613.     ULONG ModuleSize,
  614.     PVOID UserContext
  615.     );
  616.  
  617. typedef BOOL
  618. (CALLBACK *PSYMBOL_REGISTERED_CALLBACK)(
  619.     HANDLE  hProcess,
  620.     ULONG   ActionCode,
  621.     PVOID   CallbackData,
  622.     PVOID   UserContext
  623.     );
  624.  
  625. //
  626. // symbol flags
  627. //
  628. #define SYMF_OMAP_GENERATED   0x00000001
  629. #define SYMF_OMAP_MODIFIED    0x00000002
  630.  
  631. //
  632. // symbol type enumeration
  633. //
  634. typedef enum {
  635.     SymNone,
  636.     SymCoff,
  637.     SymCv,
  638.     SymPdb,
  639.     SymExport,
  640.     SymDeferred,
  641.     SymSym                  // .sym file
  642. } SYM_TYPE;
  643.  
  644. //
  645. // symbol data structure
  646. //
  647. typedef struct _IMAGEHLP_SYMBOL {
  648.     DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_SYMBOL)
  649.     DWORD                       Address;                // virtual address including dll base address
  650.     DWORD                       Size;                   // estimated size of symbol, can be zero
  651.     DWORD                       Flags;                  // info about the symbols, see the SYMF defines
  652.     DWORD                       MaxNameLength;          // maximum size of symbol name in 'Name'
  653.     CHAR                        Name[1];                // symbol name (null terminated string)
  654. } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL;
  655.  
  656. //
  657. // module data structure
  658. //
  659. typedef struct _IMAGEHLP_MODULE {
  660.     DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_MODULE)
  661.     DWORD                       BaseOfImage;            // base load address of module
  662.     DWORD                       ImageSize;              // virtual size of the loaded module
  663.     DWORD                       TimeDateStamp;          // date/time stamp from pe header
  664.     DWORD                       CheckSum;               // checksum from the pe header
  665.     DWORD                       NumSyms;                // number of symbols in the symbol table
  666.     SYM_TYPE                    SymType;                // type of symbols loaded
  667.     CHAR                        ModuleName[32];         // module name
  668.     CHAR                        ImageName[256];         // image name
  669.     CHAR                        LoadedImageName[256];   // symbol file name
  670. } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE;
  671.  
  672. //
  673. // data structures used for registered symbol callbacks
  674. //
  675.  
  676. #define CBA_DEFERRED_SYMBOL_LOAD_START          0x00000001
  677. #define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE       0x00000002
  678. #define CBA_DEFERRED_SYMBOL_LOAD_FAILURE        0x00000003
  679. #define CBA_SYMBOLS_UNLOADED                    0x00000004
  680. #define CBA_DUPLICATE_SYMBOL                    0x00000005
  681.  
  682. typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD {
  683.     DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD)
  684.     DWORD                       BaseOfImage;            // base load address of module
  685.     DWORD                       CheckSum;               // checksum from the pe header
  686.     DWORD                       TimeDateStamp;          // date/time stamp from pe header
  687.     CHAR                        FileName[MAX_PATH];     // symbols file or image name
  688. } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD;
  689.  
  690. typedef struct _IMAGEHLP_DUPLICATE_SYMBOL {
  691.     DWORD                       SizeOfStruct;           // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL)
  692.     DWORD                       NumberOfDups;           // number of duplicates in the Symbol array
  693.     PIMAGEHLP_SYMBOL            Symbol;                 // array of duplicate symbols
  694.     ULONG                       SelectedSymbol;         // symbol selected (-1 to start)
  695. } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL;
  696.  
  697.  
  698. //
  699. // options that are set/returned by SymSetOptions() & SymGetOptions()
  700. // these are used as a mask
  701. //
  702. #define SYMOPT_CASE_INSENSITIVE  0x00000001
  703. #define SYMOPT_UNDNAME           0x00000002
  704. #define SYMOPT_DEFERRED_LOADS    0x00000004
  705. #define SYMOPT_NO_CPP            0x00000008
  706.  
  707.  
  708. DWORD
  709. IMAGEAPI
  710. SymSetOptions(
  711.     IN DWORD   SymOptions
  712.     );
  713.  
  714. DWORD
  715. IMAGEAPI
  716. SymGetOptions(
  717.     VOID
  718.     );
  719.  
  720. BOOL
  721. IMAGEAPI
  722. SymCleanup(
  723.     IN HANDLE hProcess
  724.     );
  725.  
  726. BOOL
  727. IMAGEAPI
  728. SymEnumerateModules(
  729.     IN HANDLE                       hProcess,
  730.     IN PSYM_ENUMMODULES_CALLBACK    EnumModulesCallback,
  731.     IN PVOID                        UserContext
  732.     );
  733.  
  734. BOOL
  735. IMAGEAPI
  736. SymEnumerateSymbols(
  737.     IN HANDLE                       hProcess,
  738.     IN DWORD                        BaseOfDll,
  739.     IN PSYM_ENUMSYMBOLS_CALLBACK    EnumSymbolsCallback,
  740.     IN PVOID                        UserContext
  741.     );
  742.  
  743. BOOL
  744. IMAGEAPI
  745. EnumerateLoadedModules(
  746.     IN HANDLE                           hProcess,
  747.     IN PENUMLOADED_MODULES_CALLBACK     EnumLoadedModulesCallback,
  748.     IN PVOID                            UserContext
  749.     );
  750.  
  751. LPVOID
  752. IMAGEAPI
  753. SymFunctionTableAccess(
  754.     HANDLE  hProcess,
  755.     DWORD   AddrBase
  756.     );
  757.  
  758. BOOL
  759. IMAGEAPI
  760. SymGetModuleInfo(
  761.     IN  HANDLE              hProcess,
  762.     IN  DWORD               dwAddr,
  763.     OUT PIMAGEHLP_MODULE    ModuleInfo
  764.     );
  765.  
  766. DWORD
  767. IMAGEAPI
  768. SymGetModuleBase(
  769.     IN  HANDLE              hProcess,
  770.     IN  DWORD               dwAddr
  771.     );
  772.  
  773. BOOL
  774. IMAGEAPI
  775. SymGetSymFromAddr(
  776.     IN  HANDLE              hProcess,
  777.     IN  DWORD               dwAddr,
  778.     OUT PDWORD              pdwDisplacement,
  779.     OUT PIMAGEHLP_SYMBOL    Symbol
  780.     );
  781.  
  782. BOOL
  783. IMAGEAPI
  784. SymGetSymFromName(
  785.     IN  HANDLE              hProcess,
  786.     IN  LPSTR               Name,
  787.     OUT PIMAGEHLP_SYMBOL    Symbol
  788.     );
  789.  
  790. BOOL
  791. IMAGEAPI
  792. SymGetSymNext(
  793.     IN     HANDLE              hProcess,
  794.     IN OUT PIMAGEHLP_SYMBOL    Symbol
  795.     );
  796.  
  797. BOOL
  798. IMAGEAPI
  799. SymGetSymPrev(
  800.     IN     HANDLE              hProcess,
  801.     IN OUT PIMAGEHLP_SYMBOL    Symbol
  802.     );
  803.  
  804. BOOL
  805. IMAGEAPI
  806. SymInitialize(
  807.     IN HANDLE   hProcess,
  808.     IN LPSTR    UserSearchPath,
  809.     IN BOOL     fInvadeProcess
  810.     );
  811.  
  812. BOOL
  813. IMAGEAPI
  814. SymGetSearchPath(
  815.     IN  HANDLE          hProcess,
  816.     OUT LPSTR           SearchPath,
  817.     IN  DWORD           SearchPathLength
  818.     );
  819.  
  820. BOOL
  821. IMAGEAPI
  822. SymSetSearchPath(
  823.     IN HANDLE           hProcess,
  824.     IN LPSTR            SearchPath
  825.     );
  826.  
  827. BOOL
  828. IMAGEAPI
  829. SymLoadModule(
  830.     IN  HANDLE          hProcess,
  831.     IN  HANDLE          hFile,
  832.     IN  PSTR            ImageName,
  833.     IN  PSTR            ModuleName,
  834.     IN  DWORD           BaseOfDll,
  835.     IN  DWORD           SizeOfDll
  836.     );
  837.  
  838. BOOL
  839. IMAGEAPI
  840. SymUnloadModule(
  841.     IN  HANDLE          hProcess,
  842.     IN  DWORD           BaseOfDll
  843.     );
  844.  
  845. BOOL
  846. IMAGEAPI
  847. SymUnDName(
  848.     IN  PIMAGEHLP_SYMBOL sym,               // Symbol to undecorate
  849.     OUT LPSTR            UnDecName,         // Buffer to store undecorated name in
  850.     IN  DWORD            UnDecNameLength    // Size of the buffer
  851.     );
  852.  
  853. BOOL
  854. IMAGEAPI
  855. SymRegisterCallback(
  856.     IN HANDLE                       hProcess,
  857.     IN PSYMBOL_REGISTERED_CALLBACK  CallbackFunction,
  858.     IN PVOID                        UserContext
  859.     );
  860.  
  861. // Image Integrity API's
  862.  
  863. #define CERT_PE_IMAGE_DIGEST_DEBUG_INFO         0x01
  864. #define CERT_PE_IMAGE_DIGEST_RESOURCES          0x02
  865. #define CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO    0x04
  866.  
  867. #define CERT_SECTION_TYPE_ANY                   0xFF      // Any Certificate type
  868.  
  869. typedef PVOID DIGEST_HANDLE;
  870.  
  871. typedef BOOL (WINAPI *DIGEST_FUNCTION) (DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength);
  872.  
  873. BOOL
  874. IMAGEAPI
  875. ImageGetDigestStream(
  876.     IN      HANDLE  FileHandle,
  877.     IN      DWORD   DigestLevel,
  878.     IN      DIGEST_FUNCTION DigestFunction,
  879.     IN      DIGEST_HANDLE   DigestHandle
  880.     );
  881.  
  882. BOOL
  883. IMAGEAPI
  884. ImageAddCertificate(
  885.     IN      HANDLE  FileHandle,
  886.     IN      LPWIN_CERTIFICATE   Certificate,
  887.     OUT     PDWORD  Index
  888.     );
  889.  
  890. BOOL
  891. IMAGEAPI
  892. ImageRemoveCertificate(
  893.     IN      HANDLE   FileHandle,
  894.     IN      DWORD    Index
  895.     );
  896.  
  897. BOOL
  898. IMAGEAPI
  899. ImageEnumerateCertificates(
  900.     IN      HANDLE  FileHandle,
  901.     IN      WORD    TypeFilter,
  902.     OUT     PDWORD  CertificateCount,
  903.     IN OUT  PDWORD  Indices OPTIONAL,
  904.     IN OUT  DWORD   IndexCount  OPTIONAL
  905.     );
  906.  
  907. BOOL
  908. IMAGEAPI
  909. ImageGetCertificateData(
  910.     IN      HANDLE  FileHandle,
  911.     IN      DWORD   CertificateIndex,
  912.     OUT     LPWIN_CERTIFICATE Certificate,
  913.     IN OUT  PDWORD  RequiredLength
  914.     );
  915.  
  916. BOOL
  917. IMAGEAPI
  918. ImageGetCertificateHeader(
  919.     IN      HANDLE  FileHandle,
  920.     IN      DWORD   CertificateIndex,
  921.     IN OUT  LPWIN_CERTIFICATE Certificateheader
  922.     );
  923.  
  924. #ifdef __BORLANDC__
  925. #  include <poppack.h>
  926. #endif
  927.  
  928. #ifdef __cplusplus
  929. }
  930. #endif
  931.  
  932. #pragma option pop
  933. #endif  // _IMAGEHLP_
  934.